package com.springframework.sample.p1.ioc.c1;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.springframework.sample.ASpringSample;

/**
 * Teste:
 * 
 * @author Stéphane Cottin
 */
public class Sample2 extends ASpringSample{

    /*
     * (non-Javadoc)
     * @see com.springframework.sample.SpringSample#testContent()
     */
    @Override
    public void sampleContent(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring/p1/ioc/sample-2-config.xml");

        try{
            // 1 - 
            // Un bean qui a pour scope prototype: une instance par appel
            Object bean = context.getBean("beanTest6");
            Object bean2 = context.getBean("beanTest6");
            log.debug("1) Le bean [beanTest6-1] ==> {}", bean);
            log.debug("   Le bean [beanTest6-2] ==> {}", bean2);
            log.debug("   Le bean [beanTest6-1] == [beanTest6-2] ? ==> {}", bean.equals(bean2));
            log.debug("");
            
            // 2 - 
            // Un bean généré par une factory: une instance par appel (généralement)
            bean = context.getBean("beanTest7");
            bean2 = context.getBean("beanTest7");
            log.debug("2) Le bean [beanTest7-1] ==> {}", bean);
            log.debug("   Le bean [beanTest7-2] ==> {}", bean2);
            log.debug("   Le bean [beanTest7-1] == [beanTest7-2] ? ==> {}", bean.equals(bean2));
            log.debug("");
            
            // 3 - 
            // Un bean qui hérite d'un bean abstract
            bean = context.getBean("beanTest9");
            log.debug("3) Le bean beanTest9] ==> {}", bean);
            log.debug("");
            
            // 4 - 
            // Un bean qui référence un autre bean
            bean = context.getBean("beanTest10");
            log.debug("4) Le bean beanTest10] ==> {}", bean);
            log.debug("");
        }catch(Exception e){
            log.warn("Erreur", e);
         }finally{
             if(context != null){
                 context.close();
             }
         }
    }

    
    /*
     * (non-Javadoc)
     * @see com.springframework.sample.SpringSample#getSampleName()
     */
    @Override
    public String getSampleName(){
        return "Base de Spring IOC - 2";
    }

    
    /*
     * (non-Javadoc)
     * @see com.springframework.sample.SpringSample#getSampleDescription()
     */
    @Override
    public String[] getSampleDescription(){
        return new String[]{
                            "Gestion des scopes de beans Spring",
                            "Gestion des factory de beans Spring",
                            "Bean Spring abstract",
                            "Référence de bean spring"
                            };
    }
    
    
    /**
     * Classe auto executable
     */
    public static void main(String[] args){
        ASpringSample ss = new Sample2();
        ss.doTestSample();
    }
}